/*
 * @Descripttion: 
 * @version: 
 * @Author: wtzhang
 * @Date: 2021-05-31 10:49:09
 * @LastEditors: wtzhang
 * @LastEditTime: 2021-06-02 14:06:46
 */
// 引入依赖
const express = require('express')
const router = express.Router()
const User = require('./models/user')
const md5 = require('blueimp-md5')
const Topic = require('./models/topic')
const Comment = require('./models/comment')

// 默认首页
router.get('/', async (req, res) => {
  // console.log(req.session.isLogin);
  // console.log(req.session.user);
  const data = await Topic.find()
  console.log(data);
  res.render('index.html', {
    user: req.session.user,
    topics: data
  })
})
// 登录
router.get('/login', function (req, res) {
  res.render('login.html')
})
router.post('/login', function (req, res) {
  // 1. 获取表单数据
  // 2. 查询数据库用户名密码，核验是否正确
  // 3. 发送响应数据
  let body = req.body
  User.findOne({
    email: body.email,
    password: md5(md5(body.password))
  }, function (err, data) {
    if (err) {
      return res.status(500).json({
        err_code: 500,
        message: err.message
      })
    }
    if (!data) {
      return res.status(200).json({
        err_code: 1,
        message: 'Email or password is invalid!'
      })
    }
    // 用户存在，登录成功，记录登录状态
    req.session.isLogin = true
    req.session.user = data
    // 发送响应
    res.status(200).json({
      err_code: 0,
      message: 'ok'
    })
  })
})
// 注册
router.get('/register', function (req, res) {
  res.render('register.html')
})
router.post('/register', function (req, res) {
  // 1. 获取表单提交数据
  let body = req.body
  // 2. 操作数据库
  //    判断该用户是否存在
  //    如果存在，不允许注册
  // User.remove({
  //   email: body.email
  // }, function (err, data) {
  //   if (err) {
  //     console.log('error');
  //   }
  //   console.log('删除成功');
  // })
  User.findOne({
    $or: [
      { email: body.email },
      { nickname: body.nickname }
    ]
  }, function (err, data) {
    if (err) {
      return res.status(500).json({
        err_code: 500,
        message: '服务器错误！Server Error！'
      })
    }
    if (data) {
      // 邮箱或者昵称已经存在
      return res.status(200).json({
        err_code: 1,
        message: '邮箱或者昵称已经存在! Email or nickname aleary exists!'
      })
    }
    // console.log('ok');
    // 若不存在，新建用户
    // 安全考虑，对密码进行 md5 双层加密
    body.password = md5(md5(body.password))
    return new User(body).save(function (err, data) {
      if (err) {
        return res.status(500).json({
          err_code: 500,
          message: 'Internal Error！'
        })
      }
      // 注册成功, 使用session记录用户的登录状态
      req.session.isLogin = true
      req.session.user = data
      // express 提供了一个响应方法：json
      // 该方法接收一个对象，他会自动帮您把对象转为字符串，在发送给浏览器
      res.status(200).json({
        err_code: 0,
        message: 'OK! 注册成功！'
      })
    })
  })
  // promise 写法
  // User.findOne({
  //   $or: [
  //     { email: body.email },
  //     { nickname: body.nickname }
  //   ]
  // }).then(function (res) {
  //   if (res) {
  //     console.log('该用户已经存在');
  //   }
  //   console.log('ok');
  //   return new User(body).save()
  // })
  // 3. 发送响应
})
// 退出登录
router.get('/logout', function (req, res) {
  // 1. 清除登录状态
  req.session.user = null
  req.session.isLogin = false
  // 2. 重定向到登录页
  res.redirect('/login')
})

// 设置
router.get('/settings/profile', (req, res) => {
  res.render('settings/profile.html', {
    user: req.session.user
  })
})
// 设置信息提交
// router.post('/settings/profile', function (req, res) {
//   let body = req.body
//   User.updateOne(
//     { email: req.session.user.email },
//     {
//       $set: { "nickname": body.nickname, "bio": body.bio, "gender": body.gender, "birthday": body.birthday },
//       $currentDate: { "lastModified": true }
//     }, function (err, data) {
//       if (err) {
//         return res.status(500).json({
//           err_code: 500,
//           message: 'Internal Error！'
//         })
//       }
//       console.log('修改成功', data);
//     })
// })
router.post('/settings/profile', async (req, res) => {
  const body = req.body
  console.log(body);
  try {
    await User.updateOne(
      { email: req.session.user.email },
      {
        $set: { "nickname": body.nickname, "bio": body.bio, "gender": body.gender, "birthday": body.birthday },
        $currentDate: { "lastModified": true }
      })
    res.status(200).json({
      err_code: 0,
      message: 'OK'
    })
  } catch (e) {
    return res.status(500).json({
      err_code: 500,
      message: e.message
    })
  }
})

// 发表
router.get('/topics/new', (req, res) => {
  res.render('topic/new.html', {
    user: req.session.user
  })
})
router.post('/topics/new', async (req, res) => {
  const body = req.body
  body["email"] = req.session.user.email
  body["nickname"] = req.session.user.nickname
  try {
    await new Topic(body).save()
    res.status(200).json({
      err_code: 0,
      message: 'OK'
    })
  } catch (e) {
    return res.status(500).json({
      err_code: 500,
      message: e.message
    })
  }
})
// 文章详情
router.get('/topics/show', async (req, res) => {
  const id = (req.query.id).replace(/\"/g, "")
  // console.log(id);
  try {
    const topic = await Topic.findOne({ _id: id })
    const comments = await Comment.find({ articleId: id })
    res.render('topic/show.html', {
      comments: comments,
      topic: topic,
      user: req.session.user
    })
  } catch (e) {
    throw e
  }
})
router.post('/topics/show', async (req, res) => {
  const body = req.body
  const articleId = body.articleId.replace(/\"/g, "")
  // console.log(body);
  try {
    console.log(req.session.isLogin);
    if (req.session.isLogin) {
      const data = await Topic.findOne({ _id: articleId })
      const comment = {}
      comment.articleId = articleId
      comment.email = data.email
      comment.nickname = req.session.user.nickname
      comment.comments = body.comments
      await new Comment(comment).save()
      res.status(200).json({
        err_code: 0,
        message: 'OK'
      })
    } else {
      res.status(200).json({
        err_code: -1,
        message: '请先登录，在发表高见！'
      })
    }
  } catch (e) {
    res.status(500).json({
      err_code: 500,
      message: e.message
    })
  }
})

module.exports = router